#include <stdio.h>
#include <stdlib.h>
#include <delays.h>
#include <p18f4550.h>
#include "D:\skytechlabs Techie\Spark\Code\delay\delay.h"

#pragma config FOSC=HSPLL_HS
#pragma config PLLDIV=5

#define en PORTAbits.RA0
#define rs PORTAbits.RA1
#define rw PORTAbits.RA2

void lcd_char(char c);
void lcd_init(void);
void wait_for_lcd(void);
void lcd_clear(void);

void main(void)
{
	lcd_init();
	lcd_clear();
	lcd_char(0x48);
	while(1);
}

void lcd_init(void)
{
	delay_ms(16);
	TRISB=0x00;
	TRISA=0x00;
	//PORTB=0x00;
	ADCON1=0x0F;
	// sending 0x38 to set 8bit interface
	// and 5x8 dot character display
	en=1;
	rs=0;
	rw=0;
	PORTB=0x38;
	//Delay10TCYx(12);
	//Delay1KTCYx(5);
	en=0;
	delay_ms(5);
	//Delay1KTCYx(12);
	//Delay1KTCYx(120);
	//Delay1KTCYx(120);
	
	// sending 0x0E to lcd on and cursor on
	en=1;
	rs=0;
	rw=0;
	PORTB=0x0E;
	//Delay10TCYx(12);
	//Delay1KTCYx(5);
	en=0;
	delay_ms(5);
	//Delay10TCYx(12);
	//Delay1KTCYx(120);
	//Delay1KTCYx(120);

	// auto cursor move right
	en=1;
	rs=0;
	rw=0;
	PORTB=0x06;
	//Delay10TCYx(12);
	//Delay1KTCYx(5);
	en=0;
	delay_ms(5);
	//Delay10TCYx(12);
	//Delay1KTCYx(120);
	
}

void wait_for_lcd(void)
{
	char prev_portb;
	prev_portb=TRISB;
	TRISBbits.RB7=1;
	en=1;
	rs=0;
	rw=1;
	en=0;
	while(TRISBbits.RB7 == 1);
	TRISB=prev_portb;
}
	
void lcd_clear(void)
{
	TRISB=0x00;
	en=1;
	rs=0;
	rw=0;
	PORTB=0x01;
	//Delay10TCYx(12);
	//Delay1KTCYx(5);
	en=0;
	delay_ms(5);
	//Delay10TCYx(12);
	//Delay1KTCYx(120);
	//Delay1KTCYx(120);
}

void lcd_char(char c)
{
	char prev_portb;
	prev_portb=TRISB;
	TRISB=0x00;
	en=1;
	rs=1;
	rw=0;
	PORTB=0x48;
	//Delay10TCYx(12);
	en=0;
	//Delay10TCYx(12);
	delay_ms(5);
	//Delay1KTCYx(120);
	TRISB=prev_portb;
}